package br.com.pattern.dao;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import br.com.pattern.model.Produto;

public class ProdutoDao extends GenericDao{

	protected ProdutoDao(ConnectionDataBaseGeneric connectionDataBaseGeneric) {
		super(connectionDataBaseGeneric);
	}

	public void salvar(Produto produto){
		String insert = "INSERT INTO produtos(nome_produto, descricao_produto, valor_unitario_produto," +
				"quantidade, quantidade_minima, id_categoria, id_fornecedor) VALUES(?,?,?,?,?,?,?)";

		save(insert, produto.getNome(), produto.getDescricao(), produto.getValorUnitario(), produto.getQuantidade(), produto.getQuantidadeMinima(), produto.getIdCategoria(), produto.getIdFornecedor());
	}

	public void alterar(Produto produto){

		String update = "UPDATE produtos SET nome_produto=?, descricao_produto=?, valor_unitario_produto=?," +
				"quantidade=?, quantidade_minima=?, id_categoria, id_fornecedor WHERE id=?";

		update(update, produto.getNome(), produto.getDescricao(), produto.getValorUnitario(), produto.getQuantidade(), produto.getQuantidadeMinima(), produto.getId());
	}

	public void excluir(Produto produto){

		String delete = "DELETE FROM produtos WHERE id = ?";

		delete(delete, produto.getId());
	}

	public List<Produto> listaProdutos(){

		List<Produto> lista = new ArrayList<Produto>();

		String select = "SELECT * FROM produtos";

		try{
			
			PreparedStatement pstmt = getConnection().prepareStatement(select);
			ResultSet rs = pstmt.executeQuery();

			while(rs.next()){
				Produto produto = new Produto();

				produto.setId(rs.getLong("id"));
				produto.setNome(rs.getString("nome_produto"));
				produto.setDescricao(rs.getString("descricao_produto"));
				produto.setValorUnitario(rs.getDouble("valor_unitario_produto"));
				produto.setQuantidade(rs.getInt("quantidade"));
				produto.setQuantidadeMinima(rs.getInt("quantidade_minima"));
				produto.setIdCategoria(rs.getLong("id_categoria"));
				produto.setIdFornecedor(rs.getLong("id_fornecedor"));

				lista.add(produto);
			}

			rs.close();
			pstmt.close();
			
		}catch(SQLException e){
			e.printStackTrace();
		}

		return lista;
	}

	public Produto findByName(String nome) {

		String select = "SELECT * FROM produtos WHERE nome_produto = ?";

		Produto produto = null;

		try{
			
			PreparedStatement stmt = getConnection().prepareStatement(select);		
			stmt.setString(1, nome);

			ResultSet rs = stmt.executeQuery();		 

			while (rs.next()) {		
				produto = new Produto();
				
				produto.setId(rs.getLong("id"));
				produto.setNome(rs.getString("nome_produto"));
				produto.setDescricao(rs.getString("descricao_produto"));
				produto.setValorUnitario(rs.getDouble("valor_unitario_produto"));
				produto.setQuantidade(rs.getInt("quantidade"));
				produto.setQuantidadeMinima(rs.getInt("quantidade_minima"));
				produto.setIdCategoria(rs.getLong("id_categoria"));
				produto.setIdFornecedor(rs.getLong("id_fornecedor"));
			}		 

			rs.close();		
			stmt.close();
			
		}catch(SQLException e){
			e.printStackTrace();
		}

		return produto;

	}

}
